import BaseController from "../../base/baseController.js";
import OrderListModel from "../model/orderListModel.js";
import OrderDetailController from "./orderDetailController.js";

/**
 * @description 订单列表控制器
 * @class {OrderListController}
 * @extends {BaseController} 基础控制器
 * @author hhx
 * @date 2024-12-2 21:12
 * @version 0.1.2
 */
export default class OrderListController extends BaseController {

    /**
     * @description 订单详情控制器
     * @private
     * @type {OrderDetailController}
     */
    _orderDetailController = null;

    /**
     * @description 订单列表控制器 构造函数
     * @public
     * @constructor
     * @param props {Object} 配置对象
     */
    constructor(props) {
        super(props);
    }

    /**
     * @description 实例化 订单列表控制器
     * @public
     * @static
     * @param props {object} 配置对象
     * @returns {OrderListController|*} 订单列表控制器
     */
    static instance(props = {}) {
        let instance = new OrderListController(props);
        instance.init(props);
        return instance;
    }

    //=========================== 内部成员 ===============================

    /**
     * @description 获取 订单详情控制器
     * @property
     * @protected
     * @return {OrderDetailController} 订单详情控制器
     */
    get orderDetailController() {
        return this._orderDetailController;
    }

    /**
     * @description 设置 订单详情控制器
     * @property
     * @protected
     * @param value {OrderDetailController} 订单详情控制器
     */
    set orderDetailController(value) {
        this._orderDetailController = value;
    }

    //=========================== 成员方法 ===============================

    /**
     * @description 获取 订单详情控制器
     * @public
     * @return {OrderDetailController} 订单详情控制器
     */
    getOrderDetailController() {
        return this.orderDetailController;
    }

    /**
     * @description 设置 订单详情控制器
     * @public
     * @param value {OrderDetailController} 订单详情控制器
     */
    setOrderDetailController(value) {
        this.orderDetailController = value;
    }

    /**
     * @description 判断订单详情控制器是否存在
     * @public
     * @return {Boolean} true 是 false 否
     */
    hasOrderDetailController() {
        return this.isNotNull(this.orderDetailController);
    }

    //=========================== 基础属性 ===============================

    //=========================== 属性方法 ===============================

    //=========================== 接口方法 ===============================

    //=========================== 创建方法 ===============================

    /**
     * @description 创建订单列表管理器
     * @protected
     * @return {OrderListModel} 订单列表管理器
     */
    createOrderListModel() {
        return OrderListModel.instance();
    }

    /**
     * @description 创建订单详情控制器
     * @protected
     * @return {OrderDetailController} 创建订单详情控制器
     */
    createOrderDetailController() {
        return OrderDetailController.instance();
    }

    //=========================== 构建方法 ===============================

    //=========================== 重载方法 ===============================

    /**
     * @description 重载方法
     * @protected
     * @override
     */
    init(props) {

        super.init(props);

        //初始化订单列表模型
        this.initOrderListModel();

        //初始化订单详情控制器
        this.initOrderDetailController();

    }

    //=========================== 内部方法 ===============================

    /**
     * @description 初始化订单列表模型
     * @protected
     */
    initOrderListModel() {
        let orderListModel = this.createOrderListModel();
        this.setModel(orderListModel);
    }

    /**
     * @description 初始化订单详情控制器
     * @protected
     */
    initOrderDetailController() {
        let orderDetailController = this.createOrderDetailController();
        this.setOrderDetailController(orderDetailController);
    }

    //=========================== 控制方法 ===============================

    //=========================== 事件订阅 ===============================

    //=========================== 事件触发 ===============================

    //=========================== 处理函数 ===============================
}
